home *** CD-ROM | disk | FTP | other *** search
Wrap
GW-BASIC | 1986-10-20 | 17.1 KB | 644 lines
10 ' HIDE and SINK Copyright (c) 1983 Mirror Images Software, Inc. 12 ' Authors - Melissa Treatman / Phil Koopman 14 ' Date of last revision - June 7, 1983, by Jake Richter 16 ' 18 CLEAR 20 DIM PT%(40),SU%(60),DES%(60),CRS%(60),BTL%(80),SS%(50),FLM%(30),MR%(20) 22 DIM MS%(20),HIT%(20),MSL%(20),CA%(20),CB%(20),CC%(20),CD%(20),CE%(20),CF%(20) 24 DIM CG%(20),CH%(20),CI%(20),CJ%(20),CP%(20),CS%(20),N1%(20),N2%(20),N3%(20) 26 DIM MIS%(10),N4%(20),N5%(20),N6%(20),N7%(20),N8%(20),N9%(20),N10%(20),RB%(20) 28 DIM N(14,1),B%(11,11),F%(1,11,11),S%(1,4,5,2) 30 DIM H(17),N$(4),G(3),F(1,11),M(4) 32 ' 34 ' initialize for color monitor 35 KEY OFF:DEF SEG=&HB800:POKE &H3FFF,254:IF PEEK(&H3FFF)=254 THEN 37 36 CLS:PRINT "THIS PROGRAM REQUIRES THE COLOR GRAPHICS ADAPTER TO BE PLAYED.":PRINT "NO ADAPTER PRESENT. EXECUTION STOPPED.":KEY ON:STOP 37 DEF SEG=0:IF (PEEK(&H410) AND &H30)<>&H30 THEN GOTO 40 ELSE CLS:PRINT:PRINT:PRINT "TURN ON YOUR COLOR MONITOR. PRESS X TO STOP, ANY OTHER KEY TO BEGIN." 38 A$=INKEY$:IF A$="" THEN 38 39 IF A$="X" OR A$="x" THEN CLS:KEY ON:STOP ELSE WIDTH 80:POKE &H410,((PEEK(&H410) AND &HCF) OR &H20) 40 WIDTH 40 :SCREEN 1 :SCREEN 0 42 LOCATE ,,1,6,7 :SCREEN 1 44 KEY OFF:FOR X=1 TO 10:KEY X,"":NEXT 46 DEF SEG=&H40:POKE &H17,(PEEK(&H17)AND &HFFBF)+64 48 GOSUB 1206 50 H9 = - 1:H(0) = 0 52 H9 = - 1:H(0) = 0 54 BP=1 56 M(0) = 9 58 M(1) = 203 60 M(2) = 7 62 M(3) = 201 64 G(0) = 6:G(1) = 6 66 G(2) = 5:G(3) = 5 68 FOR A = 0 TO 11 70 FOR B = 0 TO 11 72 B%(A,B) = 16 74 F%(0,A,B) = 1 76 F%(1,A,B) = 1 78 NEXT B: NEXT A 80 FOR A = 0 TO 1 82 RESTORE 84 FOR B = 0 TO 4 86 READ N$(B),S%(A,B,0,0),S%(A,B,0,1) 88 S%(A,B,0,2) = S%(A,B,0,0) 90 FOR C = 1 TO S%(A,B,0,0) 92 READ S%(A,B,C,0),S%(A,B,C,2) 94 NEXT C: NEXT B: NEXT A 96 DATA PT BOAT,2,2 98 DATA 2,2301,2,3001 100 DATA SUBMARINE ,3,3 102 DATA 2,7801,2,8501,2,9201 104 DATA DESTROYER ,3,1 106 DATA 1,2316,2,3016,1,3716 108 DATA CRUISER ,4,2 110 DATA 2,7416,1,8116,1,8816,2,9516 112 DATA BATTLESHIP ,5,3 114 DATA 2,2330,1,3030,2,3730,1,4430,2,5130 116 GOSUB 626 118 R9=RS 120 GOSUB 1214 122 DEF SEG=&H40 124 CLS 126 IF G9 = 3 THEN LOCATE 1,16 :PRINT"SUPER-SALVO"; 128 IF G9 = 2 THEN LOCATE 1,19 :PRINT"SUPER"; 130 COLOR 0 132 MIS%(0)=16:MIS%(1)=7:MIS%(2)=&HF00F:MIS%(3)=&HC30:MIS%(4)=&HC3CF:MIS%(5)=&H3CC:MIS%(6)=&HC3CF:MIS%(7)=&HC30:MIS%(8)=&HF00F 134 GOSUB 488:GOSUB 498:MIS$="C1983 MIRROR IMAGES":FOR ZN=1 TO 19:LOCATE ZN,40:PRINT MID$(MIS$,ZN,1);:NEXT:PUT(312,0),MIS%,PSET 136 FOR ZN%=1 TO 100:NEXT ZN% 138 LOCATE 23,11:PLAY "MB":GOSUB 920:PLAY "MF" 140 PRINT "I AM HIDING MY SHIPS." 142 T = 1:T2 = 0 144 RANDOMIZE (VAL(RIGHT$(TIME$,2))) 146 FOR ZN%=1 TO 100:NEXT ZN% 148 FOR A = 0 TO 4 150 X = INT ( RND (1) * 10) + 1 152 Y = INT ( RND (1) * 10) + 1 154 C = INT ( RND (1) * 4) 156 IF C = 0 THEN DX = 1:DY = 0 158 IF C = 1 THEN DX = - 1:DY = 0 160 IF C = 2 THEN DX = 0:DY = 1 162 IF C = 3 THEN DX = 0:DY = - 1 164 FOR B = 1 TO S%(1,A,0,0) 166 P = X * 100 + Y 168 IF X > 10 OR X < 1 OR Y > 10 OR Y < 1 GOTO 150 170 FOR C = 0 TO A: FOR D = 0 TO S%(1,C,0,0) 172 IF S%(1,C,D,1) = P GOTO 150 174 NEXT D: NEXT C 176 S%(1,A,B,1) = P 178 X = X + DX:Y = Y + DY 180 NEXT B 182 NEXT A 184 FOR E=0 TO 4:LINE (0,176)-(319,199),0,BF 186 LOCATE 22,11:PRINT "HIDE YOUR ";N$(E);"."; 188 PRINT " TO POSITION ONE END OF THIS SHIP,"; 190 F = 0: GOSUB 742 192 GOSUB 734:X = A:Y = B 194 IF F%(0,A,B) < > 31 GOTO 228 196 LINE(0,168)-(319,199),0,BF:LOCATE 22,1 198 PRINT "DO YOU WANT THIS SHIP TO EXTEND DOWN OR"; 200 PRINT "TO THE RIGHT FROM THE MARKED POSITION?"; 202 IF BP<>0 THEN SOUND 500,2 204 LOCATE 24,13 :PRINT "ENTER D OR R "; 206 A$=INKEY$ 208 IF A$ ="D" THEN PRINT A$;: DX = 0:DY = 1: GOTO 214 210 IF A$ ="R" THEN PRINT A$;: DX = 1:DY = 0: GOTO 214 212 GOTO 206 214 LINE(0,168)-(319,199),0,BF 216 IF X + DX * S%(0,E,0,0) > 11 GOTO 222 218 IF Y + DY * S%(0,E,0,0) > 11 GOTO 222 220 GOTO 252 222 A = 0:B = 0: GOSUB 716:LINE(A,B)-(A+6,B+6),0,BF 224 GOSUB 734:F%(0,A,B) = 1 226 LINE(0,168)-(319,199),0,BF 228 LINE(0,168)-(319,199),0,BF:LOCATE 22,13: PRINT "ILLEGAL PLACEMENT!!"; 230 IF BP<>0 THEN BEEP 232 FOR D = 1 TO 500: NEXT D 234 LINE(0,168)-(319,199),0,BF 236 GOTO 186 238 FOR D = D - 1 TO 1 STEP - 1 240 P = S%(0,E,D,1) 242 B = 0:A = 0: GOSUB 716 244 LINE(A,B)-(A+6,B+6),0,BF 246 GOSUB 734:F%(0,A,B) = 1 248 NEXT D 250 GOTO 228 252 FOR D = 1 TO S%(0,E,0,2) 254 P = X * 100 + Y 256 A = 0:B = 0: GOSUB 716 258 IF F%(0,X,Y) < > 1 AND F%(0,X,Y) < > 31 GOTO 238 260 P$ = LEFT$ (N$(E),1): GOSUB 706 262 F%(0,X,Y) = 2 264 S%(0,E,D,1) = P 266 X = X + DX:Y = Y + DY 268 NEXT D 270 NEXT E 272 LINE(120,20)-(194,165),0,BF:LINE(195,24)-(199,100),0,BF 274 LINE(140,20)-(178,42),1,B:LINE(141,21)-(177,41),3,B:LINE(142,22)-(176,40),2,B:IF BP<>0 THEN BEEP 276 Y4 = 30:LIN=5:LP2=0 278 F = 1:A = 130:B = Y4:Y4 = Y4 + 8 280 IF T = 1 THEN GOSUB 1196:LOCATE 4,19 : PRINT "YOUR";:LOCATE 5,19 :PRINT"TURN";:GOSUB 870 282 IF T = 0 THEN LOCATE 4,20 :PRINT"MY";: LOCATE 5,19 :PRINT"TURN";:LINE(0,168)-(319,199),0,BF 284 FOR E = 1 TO 11:F(T2,E) = 0: NEXT E 286 E = 1 288 IF G9 > 1 AND G(T2) < 1 GOTO 376 290 IF G9 > 2 THEN FOR E = 1 TO G(T2) 292 IF T = 0 GOTO 308 294 GOSUB 926 296 GOSUB 1022 298 IF F = 1 THEN GOTO 340 300 LOCATE 22,13:PRINT "INVALID MOVE!!!"; 302 IF BP<>0 THEN BEEP 304 FOR W=1 TO 500:NEXT W: GOTO 294 306 IF BP<>0 THEN SOUND 250,2 308 N9 = N9 + 1 310 IF N9 > N8 GOTO 320 312 P = N(N9,0) 314 GOSUB 1022 316 IF F = 0 GOTO 308 318 GOTO 340 320 N7 = N7 + 1 322 IF N7 > N6 GOTO 332 324 P = N(N7,1) 326 GOSUB 1022 328 IF F = 0 GOTO 320 330 GOTO 340 332 GOSUB 804 334 GOSUB 1022 336 IF F = 0 GOTO 332 338 IF LP2=1 THEN GOTO 414 340 IF LP2=1 THEN GOTO 414 342 IF LIN<6 THEN LIN=7:LOCATE LIN,16 :PRINT"SHOTS MADE";:LIN=LIN+1 344 IF T=0 THEN GOSUB 734: B%(A,B) = 2 346 F(T2,E) = P 348 IF F(T2,E) = 0 GOTO 364 350 IF (E > G(T2) AND G9 > 1) OR (E > 1 AND G9 = 2) THEN PUT(133,LIN*8-4),MSL%:IF T=0 AND G8=0 THEN GOSUB 916 352 P$ = CHR$ ( INT (F(T2,E) / 100) + 64) 354 K$ = RIGHT$ ( STR$ (F(T2,E)),2) 356 IF LEFT$ (K$,1) = "0" THEN K$ = RIGHT$ (K$,1)+" " 358 P$ = K$ + P$:W = 20:B =LIN:LIN=LIN + 1 360 LOCATE B,W :PRINT P$;:FOR W=1 TO 1000:NEXT W 362 IF T=0 THEN GOSUB 1186 364 IF T = 0 AND F(T2,E) > 0 THEN IF BP<>0 THEN BEEP 366 IF G9 = 1 GOTO 444 368 IF G9 = 2 THEN E = E + 1 370 IF G9 > 2 THEN NEXT E:LP2=1 372 IF E > 2 AND G9 < 3 GOTO 444 374 IF E > G(T2) + G(T2 + 2) GOTO 444 376 IF G(T2 + 2) < 1 GOTO 444 378 IF G9 > 2 THEN LP2=1: FOR E = G(T2) + 1 TO G(T2) + G(T2 + 2) 380 IF T = 0 GOTO 388 382 GOSUB 930 384 IF F = 0 GOTO 444 386 GOTO 294 388 R9 = RND (R9) 390 IF R9 > 0.6 THEN P = 0: GOTO 414 392 IF G(1) < 1 GOTO 402 394 IF S%(1,0,0,0) < 2 AND S%(1,0,0,1) > 0 THEN A = 0: GOTO 410 396 IF S%(1,1,0,0) < 3 AND S%(1,1,0,1) > 0 THEN A = 1: GOTO 410 398 R9 = RND (R9) 400 IF R9 > 0.3 THEN P = 0: GOTO 414 402 R9 = RND (R9) 404 A = INT (R9 * 2) 406 IF S%(1,0,0,1) = 0 THEN A = 1 408 IF S%(1,1,0,1) = 0 THEN A = 0 410 GOSUB 968 412 GOTO 292 414 IF LIN<6 THEN LIN=7:LOCATE LIN,16 :PRINT"SHOTS MADE";:LIN=LIN+1 416 IF T=0 THEN GOSUB 734: B%(A,B) = 2 418 F(T2,E) = P 420 IF F(T2,E) = 0 GOTO 436 422 IF (E > G(T2) AND G9 > 1) OR (E > 1 AND G9 = 2) THEN PUT(130,LIN*8-5),MSL% 424 P$ = CHR$ ( INT (F(T2,E) / 100) + 64) 426 K$ = RIGHT$ ( STR$ (F(T2,E)),2) 428 IF LEFT$ (K$,1) = "0" THEN K$ = RIGHT$ (K$,1)+" " 430 P$ = K$ + P$:W = 20:B =LIN:LIN=LIN + 1 432 LOCATE B,W :PRINT P$;:FOR W=1 TO 100:NEXT W 434 IF T=0 THEN GOSUB 1186 436 IF T = 0 AND F(T2,E) > 0 THEN IF BP<>0 THEN BEEP 438 IF G9 = 1 GOTO 444 440 IF G9 = 2 THEN E = E + 1 442 IF G9 > 2 THEN NEXT E 444 IF F(T2,1) < > 0 OR F(T2,2) < > 0 GOTO 452 446 LOCATE 8,17 :PRINT"NO SHOTS"; 448 FOR X = 1 TO 500: NEXT X 450 IF G(T2 + 2) < 1 THEN LOCATE 9,19 :PRINT"LEFT!";:F=1:GOTO 538 452 FOR X = 1 TO 500: NEXT X 454 IF T = 1 THEN T = 0:T2 = 1: GOTO 272 456 LINE(120,20)-(194,165),0,BF:LINE(195,24)-(199,100),0,BF 458 FOR T = 1 TO 0 STEP - 1 460 T2 = 1: IF T = 1 THEN T2 = 0 462 FOR E = 1 TO 11 464 P = F(T2,E) 466 GOSUB 1042 468 NEXT E: NEXT T 470 GOSUB 1170 472 IF F < 3 GOTO 538 474 T = 1:T2 = 0 476 GOTO 272 478 GOSUB 1042 480 GOSUB 1170 482 IF F = 1 GOTO 538 484 IF T = 0 THEN T = 1:T2 = 0: GOTO 272 486 T = 0:T2 = 1: GOTO 272 488 LOCATE 2,16 :PRINT"HIDE & SINK"; 490 LOCATE 1,4 :PRINT"YOUR SHIPS"; 492 D = 16 494 GOSUB 506 496 RETURN 498 LOCATE 1,30:PRINT"MY SHIPS"; 500 D = 210 502 GOSUB 506 504 RETURN 506 FOR X = 0 TO 10 508 LINE(X*10+D,23)-(X*10+D,115),2 510 LINE(D-2,X*9+25)-(100+D,X*9+25),2 512 NEXT X 514 PUT(D+2,16),CA%:PUT(D+12,16),CB%:PUT(D+22,16),CC%:PUT(D+32,16),CD% 516 PUT(D+42,16),CE%:PUT(D+52,16),CF%:PUT(D+62,16),CG%:PUT(D+72,16),CH%:PUT(D +82,16),CI%:PUT(D+92,16),CJ% 518 PUT(D-10,26),N1%:PUT(D-10,35),N2%:PUT(D-10,44),N3% 520 PUT(D-10,53),N4%:PUT(D-10,62),N5%:PUT(D-10,71),N6% 522 PUT(D-10,80),N7%:PUT(D-10,89),N8%:PUT(D-10,98),N9% 524 PUT(D-13,107),N10% 526 PUT(D-1,124),CP%:PUT(D+8,122),PT% 528 PUT(D-1,138),CD%:PUT(D+8,136),DES% 530 PUT(D-1,152),CB%:PUT(D+8,150),BTL% 532 PUT(D+51,124),CS%:PUT(D+60,122),SU% 534 PUT(D+51,138),CC%:PUT(D+60,136),CRS% 536 RETURN 538 LINE(0,168)-(319,199),0,BF 540 LOCATE 22,1 : PRINT "GAME OVER ";:FOR W=1 TO 3000:NEXT W 542 LINE(120,20)-(194,165),0,BF:LINE(195,24)-(199,100),0,BF 544 IF F = 1 GOTO 562 546 IF F = 2 GOTO 576 548 PRINT "TIE GAME."; 550 GOSUB 920 552 F=0 554 FOR Z=0 TO 4 556 IF S%(0,Z,0,0)>0 THEN F=1 558 NEXT Z 560 IF F=0 THEN GOTO 608 ELSE GOTO 580 562 PRINT "YOU WIN!!!"; 564 GOSUB 904 566 F=0 568 FOR Z=0 TO 4 570 IF S%(0,Z,0,0)>0 THEN F=1 572 NEXT Z 574 IF F=0 THEN GOTO 608 ELSE GOTO 580 576 PRINT "I WIN! -- BETTER LUCK NEXT TIME."; 578 GOSUB 900 580 FOR W=1 TO 400:NEXT W:PRINT "I WILL SHOW YOU WHERE MY SHIPS WERE."; 582 FOR C = 0 TO 4 584 FOR D = 1 TO S%(1,C,0,2) 586 P = S%(1,C,D,1) 588 GOSUB 734: IF F%(1,A,B) > 3 GOTO 596 590 A = 1:B = 0 592 GOSUB 716 594 P$ = LEFT$ (N$(C),1):F = 1:LINE(A,B)-(A+6,B+6),0,BF: GOSUB 706 596 A = 1:B = 2 598 IF S%(1,C,0,0) < 1 GOTO 606 600 P = S%(1,C,D,2) 602 GOSUB 716:F = 0 604 IF S%(1,C,D,0) = 0 THEN PUT (A,B),FLM%,PSET 606 NEXT D: NEXT C:FOR WT%=1 TO 10000:NEXT WT% 608 SOUND 32767,10 610 LINE(0,168)-(319,199),0,BF:LOCATE 22,1 :PRINT "PLAY ANOTHER GAME"; 612 DEF SEG=0:POKE 127,0 614 GOSUB 792 616 IF F = 1 THEN RUN 618 CLS 620 CLS: LOCATE 12,12 : PRINT "PLAY AGAIN SOON!!" 622 GOSUB 900 624 END 626 OPEN "BDATA" FOR INPUT AS #1 628 FOR Q=0 TO 40:INPUT#1,PT%(Q):NEXT 630 FOR Q=0 TO 60:INPUT#1,SU%(Q):NEXT 632 FOR Q=0 TO 60:INPUT#1,DES%(Q):NEXT 634 FOR Q=0 TO 60:INPUT#1,CRS%(Q):NEXT 636 FOR Q=0 TO 80:INPUT#1,BTL%(Q):NEXT 638 FOR Q=0 TO 50:INPUT#1, SS%(Q):NEXT 640 FOR Q=0 TO 30:INPUT#1,FLM%(Q):NEXT 642 CLOSE #1 644 OPEN "bdata2" FOR INPUT AS #1 646 FOR Q=0 TO 20:INPUT#1,MR%(Q) 648 INPUT#1,MS%(Q) 650 INPUT#1,HIT%(Q) 652 INPUT#1,MSL%(Q) 654 INPUT#1,CA%(Q) 656 INPUT#1,CB%(Q) 658 INPUT#1,CC%(Q) 660 INPUT#1,CD%(Q) 662 INPUT#1,CE%(Q) 664 INPUT#1,CF%(Q) 666 INPUT#1,CG%(Q) 668 INPUT#1,CH%(Q) 670 INPUT#1,CI%(Q) 672 INPUT#1,CJ%(Q) 674 INPUT#1,CP%(Q) 676 INPUT#1,CS%(Q) 678 INPUT#1,N1%(Q) 680 INPUT#1,N2%(Q) 682 INPUT#1,N3%(Q) 684 INPUT#1,N4%(Q) 686 INPUT#1,N5%(Q) 688 INPUT#1,N6%(Q) 690 INPUT#1,N7%(Q) 692 INPUT#1,N8%(Q) 694 INPUT#1,N9%(Q) 696 INPUT#1,RB%(Q) 698 INPUT#1,N10%(Q) 700 NEXT Q 702 CLOSE #1 704 RETURN 706 IF P$ = "B" THEN PUT(A,B),CB%,PSET:RETURN 708 IF P$ = "C" THEN PUT(A,B),CC%,PSET:RETURN 710 IF P$ = "D" THEN PUT(A,B),CD%,PSET:RETURN 712 IF P$ = "P" THEN PUT(A,B),CP%,PSET:RETURN 714 IF P$ = "S" THEN PUT(A,B),CS%,PSET:RETURN 716 J = P / 100 718 M = INT (J) 720 J = INT ((J - M) * 100 + 0.5) 722 IF B = 2 GOTO 730 724 A = M * 10 + M(A) 726 B = J * 9 + 17 728 RETURN 730 A = M + M(A + B) 732 B = J + 121: RETURN 734 B = P / 100 736 A = INT (B) 738 B = INT ((B - A) * 100 + 0.5) 740 RETURN 742 LOCATE 24,1:A1$="":A2$="":A3$="" :IF BP<>0 THEN SOUND 300,2 744 PRINT" ENTER A NUMBER/LETTER POSITION..."; 746 A1$=INKEY$ 748 IF A1$="" THEN GOTO 746 750 IF ASC(A1$)>48 AND ASC(A1$)<58 THEN PRINT A1$;:GOTO 752 ELSE GOTO 746 752 A2$=INKEY$ 754 IF A2$="" THEN GOTO 752 756 IF A2$="0" THEN PRINT A2$;:GOTO 760 758 IF ASC(A2$)>64 AND ASC(A2$)<75 THEN PRINT A2$;:A3$=A2$:A2$="":GOTO 766 ELSE GOTO 752 760 A3$=INKEY$ 762 IF A3$="" THEN GOTO 760 764 IF ASC(A3$)>64 AND ASC(A3$)<75 THEN PRINT A3$; ELSE GOTO 760 766 A$=A3$+A1$+A2$ 768 A = ASC (A$) - 64 770 B = VAL ( RIGHT$ (A$, LEN (A$) - 1)) 772 P = A * 100 + B 774 IF A > 0 AND A < 11 AND B > 0 AND B < 11 GOTO 782 776 LOCATE 24,1 778 PRINT "ENTER A NUMBER/LETTER PAIR SUCH AS '8A'";:IF BP<>0 THEN SOUND 500,4 780 GOTO 742 782 GOSUB 734 784 IF F%(F,A,B) > 3 THEN RETURN 786 IF F = 0 AND F%(F,A,B) < > 1 THEN RETURN 788 F%(F,A,B) = 31:A = F:B = 0: GOSUB 716:F = 0: PUT(A,B),MR% 790 RETURN 792 PRINT " (Y/N) ";:IF BP<>0 THEN SOUND 550,2 794 A$=INKEY$ 796 IF A$="Y" THEN PRINT A$;:F=1:GOTO 802 798 IF A$="N" THEN PRINT A$;:F=0:GOTO 802 800 GOTO 794 802 RETURN 804 B = 0:P = 0 806 R9 = RND (R9) 808 X = INT (R9 * 10) + 1 810 R9 = RND (R9) 812 Y = INT (R9 * 10) + 1 814 FOR C = 0 TO 99 816 IF B%(X,Y) < > 16 GOTO 824 818 A = B%(X - 1,Y) * B%(X + 1,Y) + B%(X,Y - 1) * B%(X,Y + 1) 820 IF A < 3 THEN A = 0 822 IF A > B THEN P = X * 100 + Y:B = A: IF A > 500 THEN RETURN 824 X = X + 1: IF X > 10 THEN X = 1:Y = Y + 1: IF Y > 10 THEN Y = 1 826 NEXT C 828 IF P=0 THEN END 830 RETURN 832 GOSUB 734 834 P=0 836 ZN1%=B%(A+1,B):ZN2%=B%(A-1,B):ZN3%=B%(A,B+1):ZN4%=B%(A,B-1) 838 IF ZN1%=8 THEN IF ZN2%=16 THEN IF (A>1) THEN P=(A-1)*100+B 840 IF ZN2%=8 THEN IF ZN1%=16 THEN IF (A<10) THEN P=(A+1)*100+B 842 IF ZN3%=8 THEN IF ZN4%=16 THEN IF (B>1) THEN P=A*100+B-1 844 IF ZN4%=8 THEN IF ZN3%=16 THEN IF (B<10) THEN P=A*100+B+1 846 RETURN 848 R9 = RND (R9) 850 GOSUB 734 852 P=0 854 IF R9 < 0.5 GOTO 862 856 IF B%(A + 1,B) = 16 AND A < 10 THEN P = (A + 1) * 100 + B: RETURN 858 IF B%(A - 1,B) = 16 AND A > 1 THEN P = (A - 1) * 100 + B: RETURN 860 IF R9 < 0.5 THEN RETURN 862 IF B%(A,B - 1) = 16 AND B > 1 THEN P = A * 100 + B - 1: RETURN 864 IF B%(A,B + 1) = 16 AND B < 10 THEN P = A * 100 + B + 1: RETURN 866 IF R9 < 0.5 GOTO 856 868 RETURN 870 N8 = - 1:N6 = - 1 872 IF H9 < 0 GOTO 896 874 FOR D = 0 TO H9 876 P = H(D) 878 GOSUB 832 880 IF P > 0 THEN N8 = N8 + 1:N(N8,0) = P: GOTO 894 882 P = H(D) 884 GOSUB 848 886 IF P > 0 THEN N6 = N6 + 1:N(N6,1) = P 888 P = H(D) 890 GOSUB 848 892 IF P > 0 THEN N6 = N6 + 1:N(N6,1) = P 894 NEXT D 896 N9 = - 1:N7 = - 1 898 RETURN 900 IF BP<>0 THEN PLAY"T180L4O3C2EGA.E8.A.P16O4C2DO3BO4C2." 902 RETURN 904 IF BP<>0 THEN PLAY"T200L4O3DF8F8F8E-D8F2P8F8.G8G8G8B-G8F2P8L8FGFGB-AGFGFO2DB-L4O3D8.F8F8F8GA8B-2" 906 RETURN 908 IF BP=0 THEN RETURN 909 FOR SC=1 TO 5:SOUND 500,1:SOUND 600,1:FOR W=1 TO 50:NEXT W:NEXT SC 910 RETURN 912 IF BP=0 THEN RETURN 913 FOR FQ=475 TO 170 STEP -25:SOUND FQ,2:NEXT FQ:SOUND 175,18:PLAY"MF" 914 RETURN 916 IF BP=0 THEN RETURN 917 FOR SC=1 TO 4:SOUND 300,10:SOUND 200,10:NEXT SC 918 RETURN 920 IF BP=0 THEN RETURN 921 FOR CT=1 TO 2 :SOUND 400,2:SOUND 32767,5:SOUND 500,2 922 SOUND 32767,5 :SOUND 400,2:SOUND 32767,5:SOUND 300,2:SOUND 32767,5:NEXT CT 924 RETURN 926 F = 1:LINE(0,168)-(319,199),0,BF:GOSUB 742 928 RETURN 930 IF BP<>0 THEN BEEP 932 LINE(0,168)-(319,199),0,BF: LOCATE 22,1 934 PRINT "WANT TO FIRE A MISSILE";:GOSUB 792 936 IF F = 0 THEN LINE(0,168)-(319,199),0,BF: RETURN 938 GOSUB 916 940 A = 0 942 IF S%(0,0,0,1) > 0 THEN A = 1 944 IF S%(0,1,0,1) > 0 THEN A = A + 2 946 IF A < 3 GOTO 960 948 LINE(0,168)-(319,199),0,BF: LOCATE 22,1 950 PRINT"FIRE FROM SUB OR PT BOAT (S/P)? ";:IF BP<>0 THEN BEEP 952 A$=INKEY$ 954 IF A$="P" THEN A=1:PRINT A$;:GOTO 960 956 IF A$="S" THEN A=2:PRINT A$;:GOTO 960 958 GOTO 952 960 A=A-1 962 GOSUB 968 964 F = 1 966 RETURN 968 FOR B = 1 TO 5 970 IF S%(T2,A,B,0) = 2 GOTO 974 972 NEXT B: STOP :REM ERROR 974 S%(T2,A,B,0) = 1 976 S%(T2,A,0,1) = S%(T2,A,0,1) - 1 978 P = S%(T2,A,B,2) 980 G(T2 + 2) = G(T2 + 2) - 1 982 B = 2:A = T2 984 F = 0 986 IF T = 0 AND G8 < > 1 THEN F = 1 988 IF T=0 AND G8=0 GOTO 1020 990 GOSUB 716 992 IF T=0 THEN D=210 ELSE D=16 994 IF A=D+14 THEN A=A-2:B=B-1 996 IF A=D+21 THEN A=A+3:B=B-1 998 IF A=D+69 THEN A=A-1 1000 IF A=D+76 THEN A=A+1 1002 IF A=D+83 THEN A=A+3 1004 FOR C = B+6 TO B+3 STEP -1 1006 FOR J = 1 TO 400: NEXT J 1008 LINE (A+1,C)-(A+3,C),2: PSET(A+2,C-1),2 1010 LINE (A+1,C+1)-(A+3,C+1),1 1012 IF BP<>0 THEN BEEP 1014 NEXT C 1015 IF BP=0 THEN RETURN 1016 FOR SND=1 TO 8:SOUND 800,1:SOUND 32767,1:NEXT SND 1018 LINE (A+1,B+2)-(A+3,B+3),0,BF 1020 RETURN 1022 F = 0 1024 GOSUB 734 1026 C = F%(T,A,B) 1028 IF C > 3 AND C < 31 THEN RETURN 1030 IF E < 2 THEN F = 1: RETURN 1032 F = 1 1034 FOR A = 1 TO E - 1 1036 IF F(T2,A) = P THEN F = 0 1038 NEXT A 1040 RETURN 1042 IF P = 0 THEN RETURN 1044 B = 0:A = T: GOSUB 716 1046 IF BP<>0 THEN BEEP 1048 GOSUB 1064 1050 FOR C = 0 TO 4: FOR D = 1 TO 5 1052 IF S%(T,C,D,1) = P GOTO 1078 1054 NEXT D: NEXT C 1056 PUT (A,B),MS%,PSET 1058 GOSUB 734:F%(T,A,B) = 28 1060 IF T = 0 THEN GOSUB 734:B%(A,B) = 1 1062 RETURN 1064 PUT(A,B),MR%,PSET 1066 FOR J = 1 TO 3 1068 LINE(A,B)-(A+6,B+6),0,BF:FOR W=1 TO 200:NEXT W 1070 PUT (A,B),MR%:FOR W=1 TO 200:NEXT W 1072 IF BP<>0 THEN SOUND 660,1 1074 NEXT J 1076 RETURN 1078 GOSUB 908 1080 IF T = 0 THEN H9 = H9 + 1:H(H9) = P 1082 PUT (A,B),HIT%,PSET 1084 IF S%(T,C,D,0) < > 2 GOTO 1092 1086 S%(T,C,0,1) = S%(T,C,0,1) - 1 1088 IF C < 2 THEN G(T + 2) = G(T + 2) - 1 1090 IF C > 1 THEN G(T) = G(T) - 1 1092 S%(T,C,0,0) = S%(T,C,0,0) - 1 1094 IF T = 1 AND G8 < > 1 GOTO 1112 1096 LINE(A,B)-(A+6,B+6),0,BF 1098 P$ = LEFT$ (N$(C),1):F = 1: GOSUB 706 1100 PUT(A-2,B),RB%,OR 1102 P = S%(T,C,D,2):A = T:B = 2 1104 GOSUB 716 1106 LINE(A,B-1)-(A+6,B-1),0 1108 PUT (A,B),FLM%,PSET 1110 LINE(A-1,B+5)-(A+7,B+7),1,BF 1112 P = S%(T,C,D,1): GOSUB 734:F%(T,A,B) = 8 1114 S%(T,C,D,0) = 0 1116 IF T = 0 THEN B%(A,B) = 8 1118 IF S%(T,C,0,0) > 0 THEN RETURN 1120 A = 120:B = 30:F = 1 1122 LINE (0,168)-(319,199),0,BF:LOCATE 23,16 1124 IF T = 1 THEN PRINT "YOU SUNK MY "; 1126 IF T = 0 THEN PRINT "I SUNK YOUR "; 1128 LOCATE 24,17 :PRINT N$(C); 1130 PLAY "MB": GOSUB 912 1132 FOR CT=1 TO 4:FOR COL=1 TO 2 1134 LINE(115,171)-(211,174),COL,BF:LINE(115,171)-(118,195),COL,BF:LINE(208,171)-(211,195),COL,BF:LINE(115,192)-(211,195),COL,BF 1136 SOUND 32767,5:NEXT COL:NEXT CT 1138 FOR X = S%(T,C,0,2) TO 1 STEP - 1 1140 P = S%(T,C,X,1):A = T:B = 0: GOSUB 716:F = 1 1142 P$ = LEFT$ (N$(C),1): REM GOSUB 200 1144 IF T = 1 GOTO 1152 1146 FOR A = 0 TO H9: IF H(A) = P THEN H(A) = H(H9):H9 = H9 - 1 1148 NEXT A 1150 GOSUB 734:B%(A,B) = 1 1152 NEXT X 1154 P = S%(T,C,1,2):B = 2:A = T: GOSUB 716:F = 0 1156 B=B-1 1158 IF A=85 OR A=279 THEN A=A-2 1160 LINE(A-7,B)-(A+35,B+10),0,BF 1162 IF B>145 THEN LINE(A+35,B)-(A+40,B+10),0,BF 1164 PUT (A,B),SS%,PSET 1166 LINE(0,168)-(319,199),0,BF 1168 IF F < = 3 THEN P = 3378: RETURN 1170 F = 0 1172 FOR A = 0 TO 1 1174 FOR B = 0 TO 4 1176 IF S%(A,B,0,0) < > 0 THEN F = F + A + 1: GOTO 1180 1178 NEXT B 1180 NEXT A 1182 IF G9 > 1 AND G(0) + G(1) + G(2) + G(3) = 0 THEN F = 0 1184 RETURN 1186 BB=P/100:AA=INT(BB):BB=INT((BB-AA)*100+0.5) 1188 AA=AA*10+9:BB=BB*9+17 1190 LINE (AA,BB)-(AA+6,BB+6),0,BF 1192 PUT(AA,BB),MR% 1194 RETURN 1196 IF G(0)=0 AND G(2)=0 THEN F=2:LOCATE 7,17:GOTO 1202 1198 IF G(1)=0 AND G(3)=0 THEN F=1:LOCATE 7,18:GOTO 1202 1200 RETURN 1202 IF G(0)=0 AND G(1)=0 AND G(2)=0 AND G(3)=0 THEN F=0:LOCATE 7,19:PRINT "BOTH";:LOCATE 8,18:PRINT "OUT OF";:LOCATE 9,18:PRINT "SHOTS!";:RETURN 538 ELSE IF F=1 THEN LOCATE 7,18:PRINT "I HAVE"; ELSE LOCATE 7,17:PRINT "YOU HAVE"; 1204 LOCATE 8,17:PRINT"NO SHOTS";:LOCATE 9,19:PRINT"LEFT!";:RETURN 538 1206 COLOR 1,1:LINE(0,0)-(319,199),1,B:LINE(1,1)-(318,198),3,B:LINE(2,2)-(317,197),2,B 1208 LOCATE 8,4:PRINT"Mirror Images Software Presents:":LINE(24,64)-(280,64),3 1210 LOCATE 12,16:PRINT"H I D E":LOCATE 14,19:PRINT"&":LOCATE 16,16:PRINT"S I N K" 1212 RETURN 1214 ' 1216 CLS:LINE(0,0)-(319,199),2,B:LINE(1,1)-(318,198),3,B:LINE(2,2)-(317,197),1,B 1218 LOCATE 24,5:PRINT"(C)1983 Mirror Images Software"; 1220 LOCATE 11,10:PRINT"DO YOU WANT THE SOUND";:LOCATE 13,16:PRINT"TURNED ON"; 1222 LOCATE 15,17:GOSUB 1268:BP=F 1224 CLS:LINE(0,0)-(319,199),2,B:LINE(1,1)-(318,198),1,B:LINE(2,2)-(317,197),3,B 1226 LOCATE 24,5:PRINT"(C)1983 Mirror Images Software"; 1228 LOCATE 3,5 : PRINT "PICK THE GAME YOU WANT TO PLAY:"; 1230 LOCATE 6,5 : PRINT "1=STANDARD HIDE & SINK"; 1232 LOCATE 8,5: PRINT "2=SUPER-HIDE & SINK"; 1234 LOCATE 10,5: PRINT "3=SUPER-SALVO HIDE & SINK"; 1236 IF BP<>0 THEN SOUND 500,2 1238 LOCATE 13,5 : PRINT "WHAT NUMBER GAME DO YOU WANT? "; 1240 A$= INKEY$ 1242 IF A$="" THEN GOTO 1240 1244 IF ASC(A$)>48 AND ASC(A$)<52 THEN G9=VAL(A$):GOTO 1248 1246 GOTO 1240 1248 B = 8:F = 1 1250 CLS 1252 LINE(0,0)-(319,199),1,B:LINE(1,1)-(318,198),2,B:LINE(2,2)-(317,197),3,B 1254 LOCATE 24,5:PRINT"(C)1983 Mirror Images Software"; 1256 LOCATE 7,6 : PRINT "DO YOU WANT THE 'NIGHTTIME'"; 1258 LOCATE 10,10: PRINT "OPTION TURNED ON?"; 1260 LOCATE 13,3 : PRINT "(THIS MAKES THE GAME MORE DIFFICULT)"; 1262 LOCATE 15,14: GOSUB 1268 1264 IF F=1 THEN G8=0 ELSE G8=1 1266 RETURN 1268 PRINT " (Y/N) ";:IF BP<>0 THEN SOUND 550,2 1270 A$=INKEY$ 1272 IF A$="Y" THEN PRINT A$;:F=1:GOTO 1278 1274 IF A$="N" THEN PRINT A$;:F=0:GOTO 1278 1276 GOTO 1270 1278 RETURN